/**
 * 奖励类型枚举
 */
export const REWARD_TYPE = {
  /** 战斗经验值奖励 */
  EXP: 'EXP',
  /** 物品奖励 */
  ITEM: 'ITEM',
  /** 灵石 */
  SPIRIT_STONE: 'SPIRIT_STONE',
  /** 宗门贡献 */
  SECT_CONTRIBUTION: 'SECT_CONTRIBUTION',
} as const;

/** 奖励类型 */
export type RewardType = (typeof REWARD_TYPE)[keyof typeof REWARD_TYPE];

/**
 * 基础奖励接口
 */
export interface BaseReward {
  /** 奖励类型 */
  type: RewardType;
  /** 奖励名称 */
  name: string;
  /** 奖励描述信息 */
  description?: string;
}

/**
 * 奖励配置接口
 */
export interface RewardConfig {
  /** 奖励类型 */
  type: RewardType;
  /** 奖励名称 */
  name?: string;
  /** 奖励描述 */
  description?: string;
  /** 奖励数量（用于经验值奖励） */
  amount?: number;
  /** 物品ID（用于物品奖励） */
  itemId?: string;
  /** 物品数量（用于物品奖励） */
  quantity?: number;
  /** 掉落概率 */
  rate?: number;
  /** 是否必掉 */
  guaranteed?: boolean;
  /** 权重（用于权重随机） */
  weight?: number;
}

/**
 * 灵活的奖励池
 */
export interface RewardPoolConfig {
  /** 奖励列表 */
  rewards: RewardConfig[];
  /** 掉落策略 */
  dropStrategy?: 'probability' | 'weighted' | 'fixed';
  /** 掉落数量控制 */
  dropCount?: number | { min: number; max: number };
}

/**
 * 战斗经验值奖励接口
 */
export interface ExpReward extends BaseReward {
  type: typeof REWARD_TYPE.EXP;
  amount: number;
}

/**
 * 物品奖励接口
 */
export interface ItemReward extends BaseReward {
  type: typeof REWARD_TYPE.ITEM;
  itemId: string;
  quantity: number;
}

/**
 * 灵石奖励接口
 */
export interface SpiritStoneReward extends BaseReward {
  type: typeof REWARD_TYPE.SPIRIT_STONE;
  quantity: number;
}

/**
 * 宗门贡献奖励接口
 */
export interface SectContributionReward extends BaseReward {
  type: typeof REWARD_TYPE.SECT_CONTRIBUTION;
  quantity: number;
}

/**
 * 奖励联合类型
 */
export type Reward =
  | ExpReward
  | ItemReward
  | SpiritStoneReward
  | SectContributionReward;

export const REWARD_SOURCE_TYPE = {
  /** 战斗结算 */
  BATTLE: 'BATTLE',
  /** 宗门挂机任务结算 */
  SECT_HANG_UP_TASK: 'SECT_HANG_UP_TASK',
  /** 宗门藏书阁兑换 */
  SECT_SCRIPTURE_EXCHANGE: 'SECT_SCRIPTURE_EXCHANGE',
} as const;

export type RewardSourceType =
  (typeof REWARD_SOURCE_TYPE)[keyof typeof REWARD_SOURCE_TYPE];
